package processador.sessao;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;

import modelo.mensagem.AbstractMensagem;
import modelo.servidor.implementacao.ServidorSMTP;

/**
 * <p>
 * Classe responsável por montar os objetos necessários para o transporte da
 * mensagem: Propriedades do servidor SMTP, dados de autenticação e sessão.
 * </p>
 * 
 * @author Willyan Guimarães Caetano
 * 
 */
public final class ProcessadorSessao {

	public static Authenticator processaAutenticacao(
			final AbstractMensagem mensagem) {
		Authenticator autenticador = new Authenticator() {
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(mensagem.getRemetente()
						.getEnderecoEmail(), mensagem.getRemetente().getSenha());
			}
		};
		return autenticador;
	};

	public static Session processaSessao(Properties propriedades,
			Authenticator autenticador) {
		Session sessao = Session.getDefaultInstance(propriedades, autenticador);
		sessao.setDebug(true);

		return sessao;
	}

	public static Properties processaConfiguracao(ServidorSMTP servidorSMTP) {

		Properties propriedades = new Properties();

		propriedades.setProperty("mail.transport.protocol", "smtp");
		propriedades.setProperty("mail.host", servidorSMTP.getEndereco());
		propriedades.setProperty("mail.smtp.auth",
				String.valueOf(servidorSMTP.isIndicadorAutenticacao()));
		propriedades.setProperty("mail.smtp.starttls.enable",
				String.valueOf(servidorSMTP.isIndicadorConexaoSegura()));
		propriedades.setProperty("mail.smtp.port",
				String.valueOf(servidorSMTP.getPorta()));
		propriedades.setProperty("mail.mime.charset", servidorSMTP.getCharset()
				.getValor());

		return propriedades;

	}
}
